##################################################################
#	CentOS(7.6)求生之路2服务器搭建	-by狐狸Mori(QQ:2503904285)
#	使用说明:
#		直接将打包好的 1.tar.gz 或者 1.zip 插件压缩包放到~目录下即可
#		该脚本运行完成后会生成一个run文件，请不要删除它
#	如果服务器异常关机或其他情况，请手动创建后台后运行run即可
#		手动创建后台:	screen -S name
#		终止后台: 		screen -ls 查看全部后台
#						screen -S -X kill id(你想终止的那个的id)
#	1.tar.gz 、1.zip打包要求:
#		解压出来必须直接是addons、cfg等目录，不应在某一目录下面包含
#		addons、cfg等子目录，因此出现的所有问题，本人概不解决
#		插件压缩包请使用压缩工具打包生成，绝不能手动修改后缀名
#		由于修改后缀名产生的各种问题，本人概不负责
#	警告：自行修改本脚本所造成的无法预测的后果，本人概不负责
##################################################################
#!/bin/bash

echo "请选择需要进行的操作："
echo "1 安装求生之路服务器配套环境"
echo "2 一键开服(使用狐狸的方法及已打包好的插件压缩包)"
echo "3 更新现有服务器下面所有求生之路服务端文件"
read a

function env_config(){
	source /etc/os-release
	echo "检测到$ID发行版"
	case $ID in
	debian|ubuntu|devuan)
		sudo dpkg --add-architecture i386
		sudo apt-get update
		yes | sudo apt-get install lib32gcc1 lib32stdc++6 libc6-i386 libcurl4-gnutls-dev:i386 screen unzip libc6-dev wget curl
		;;
	centos|fedora|rhel)
		yum -y update
		sudo yum -y install xulrunner.i686
		yum -y install screen
		yum -y install unzip
		yum -y install wget
		yum -y install curl
		;;
	*)
		echo "错误：不支持的发行版"
		exit 1
		;;
	esac
}


case $a in
	1)
		echo "安装服务器配套环境文件中……"
		env_config
		echo "服务器配套环境已安装完成！"
		;;
	2)
		echo "执行一键开服……"
		env_config

		if [ -d ~/steam ] ;then
			echo "已经存在一个steam文件夹"
		else
			mkdir ~/steam
		fi

		if [ -e ~/steam/steamcmd.sh ] ;then
			echo "已解压steamcmd"
		else
			if [ -e /tmp/steamcmd_linux.tar.gz ];then
				echo "解压steamcmd……"
			else
				wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz -P /tmp
			fi
			tar -xvzf /tmp/steamcmd_linux.tar.gz -C ~/steam/
			rm /tmp/steamcmd_linux.tar.gz
		fi

		for((;;)){
			if [ -d ~/steam/l4d2/left4dead2/cfg ] ;then
				break
			else
				echo "下载服务端失败，正在重试……"
			fi
			~/steam/steamcmd.sh +login anonymous +force_install_dir ./l4d2 +app_update 222860 validate +quit
		}

		function tar_package(){
			tarlist=$(ls | grep 'tar.gz')
			echo "$tarlist"
			for tarname in $tarlist
			do
				echo "$tarname"
				if [ -e "$tarname" ];then
				tar -xvzf "$tarname" -C ~/steam/l4d2/left4dead2/
				fi
			done
		}
		function zip_package(){
			ziplist=$(ls | grep 'zip')
			echo "$ziplist"
			for zipname in $ziplist
			do
				echo "$zipname"
				if [ -e "$zipname" ];then
				unzip -d ~/steam/l4d2/left4dead2/ "$zipname"
				fi
			done
		}
		function run_server(){
			if [ -e /tmp/run.c ] ;then
				echo "守护进程源码存在"
			else
				echo "下载守护进程源码..."
				wget -P /tmp https://gitee.com/ScarletClimax/huli-l4d2server-script/raw/master/run.c
			fi
			gcc /tmp/run.c -o ~/run
			screen -S l4d2 ~/run
		}


		if [ -e *.tar.gz ] ;then
			tar_package
			if [ -e ~/steam/l4d2/left4dead2/cfg/server.cfg ] ;then
				echo "成功安装插件，正在启动服务器……"
				run_server
			else
				echo "插件包自动安装失败,请检查插件包格式是否已按照要求打包"
			fi
		fi

		echo "tar.gz 插件压缩包不存在!"
		echo "正在尝试寻找 zip 插件压缩包"

		if [ -e *.zip ] ;then
			zip_package
			if [ -e ~/steam/l4c2/left4dead2/cfg/server.cfg ] ;then
				echo "成功安装插件，正在启动服务器……"
				run_server
			else
				echo "插件包自动安装失败,请检查插件包格式是否已按照要求打包"
			fi
		fi

		echo "zip 插件压缩包不存在!"
		echo "请检查插件压缩包格式、名称是否正确"
		echo "如果检查确认插件包格式正确，请重试"

		while true; do
			read -p "未成功安装插件，是否运行纯净服务器[y/n]" yn
			case $yn in
				[Yy]* ) 
					run_server
				;;
				[Nn]* ) 
					echo "本脚本已运行完成，程序即将自动退出"
					exit
				;;
				* ) echo "请输入yes或no";;
			esac
		done
		;;
	3)
		echo "正在对当前文件目录下所有服务端进行升级……"
		function update(){
			srcdslist=$(ls | grep 'srcds_run')
			for srcsrcdsfilefile in $srcdslist
			do
				echo "$srcdsfile"
				uppath=$(pwd)
				"$path"/steamcmd.sh +login anonymous +force_install_dir "$uppath" +app_update 222860  +quit
			done
			dirlist=$(ls)
			for dirname in $dirlist
			do
				if [ -d "$dirname" ];then
					cd $dirname
					update
					cd ..
				fi
			done
		}

		function check(){
			slist=$(ls | grep 'steamcmd.sh')
			for sfile in $slist
			do
				echo "$sfile"
				path=$(pwd)
				echo "path"
				cd $path
				update
			done
			sdirlist=$(ls)
			for sdirname in $sdirlist
			do
				if [ -d "$sdirname" ];then
					cd $sdirname
					check
					cd ..
				fi
			done
		}

		check

		echo "所有服务端已升级完成，请手动重启各(求生)服务器完成升级！"
		;;
	*)
		echo "?"
		;;
esac
